﻿using System;
using System.Collections.Generic;

using System.IO;
using System.Web;
using com.byt.webcore;
using com.byt.suce.db.dao;
using com.byt.suce.db.factory;
using com.byt.suce.db.mapper;
using MYLSOFT.JsonSimple;
using com.byt.webcore.utils;
using suce.upload;

namespace suce.solicitud
{
    /// <summary>
    /// Summary description for Solicitud
    /// </summary>
    public class Solicitud : ServletBase
    {

        private IPkgSolicitud DAO = PkgSolicitudFactory.create();
        private IPkgVuce DAOvuce = PkgVuceFactory.create();
        private IPkgWorkflow DAOwfl = PkgWorkflowFactory.create();

        protected override void doCommand(com.byt.webcore.ServletBase.Parameters p)
        {
            if ("GETBYID".Equals(p.command))
                GETBYID(p);
            else if ("PRODUCTO".Equals(p.command))
                PRODUCTO(p);
            else if ("GETCOMPARE".Equals(p.command))
                GETCOMPARE(p);
            else if ("SUBSANACION".Equals(p.command))
                SUBSANACION(p);
            else if ("REENVIAR".Equals(p.command))
                REENVIAR(p);
            else if ("DR".Equals(p.command))
                DR(p);
            else if ("ADJUNTOS".Equals(p.command))
                ADJUNTOS(p);
            

        }

        private void GETBYID(Parameters p)
        {
            PkgSolicitud.GetbyidParam param = DAO.getbyid(p.conn, p.getMap());
            JSONObject jo = new JSONObject();
            jo.Add("form", Utils.getJSONObject(param.CurOut));
            jo.Add("productos", Utils.getJSONArrayArray(param.CurProducto));
            jo.Add("adjuntos", Utils.getJSONArrayArray(param.CurAdjunto));
            jo.Add("subsanaciones", Utils.getJSONArrayArray(param.CurSubsanaciones));
            jo.Add("comprobantes", Utils.getJSONArrayArray(param.CurComprobantes));
            jo.Add("deuda", Utils.getJSONObject(param.CurDeuda));
            jo.Add("adj", Utils.getJSONArrayArray(param.CurAdj));
            jo.Add("laboratorio", Utils.getJSONArrayArray(param.CurLaboratorio));
            jo.Add("infoa", Utils.getJSONObject(param.CurDGS002));//agregado por DGS002
            param.CurOut.Close();
            param.CurProducto.Close();
            param.CurAdjunto.Close();
            param.CurSubsanaciones.Close();
            param.CurComprobantes.Close();
            param.CurDeuda.Close();
            param.CurAdj.Close();
            param.CurLaboratorio.Close();
            param.CurDGS002.Close();
            p.print(jo);
        }

        private void GETCOMPARE(Parameters p)
        {
            if ("INTEGRADO".Equals(p.subcommand))
            {
                PkgSolicitud.GetcompareintegradoParam param = DAO.getcompareintegrado(p.conn, p.getMap());
                JSONObject jo = new JSONObject();
                jo.Add("suceact", Utils.getJSONObject(param.CurSuceact));
                jo.Add("suceant", Utils.getJSONObject(param.CurSuceant));
                jo.Add("prodsuceact", Utils.getJSONArrayObject(param.CurProdsuceact));
                jo.Add("prodsuceant", Utils.getJSONArrayObject(param.CurProdsuceant));

                param.CurSuceact.Close();
                param.CurSuceant.Close();
                param.CurProdsuceact.Close();
                param.CurProdsuceant.Close();

                p.print(jo);
            }
            else
            {
                PkgSolicitud.GetcompareParam param = DAO.getcompare(p.conn, p.getMap());
                JSONObject jo = new JSONObject();
                jo.Add("suceact", Utils.getJSONObject(param.CurSuceact));
                jo.Add("suceant", Utils.getJSONObject(param.CurSuceant));
                jo.Add("prodsuceact", Utils.getJSONArrayObject(param.CurProdsuceact));
                jo.Add("prodsuceant", Utils.getJSONArrayObject(param.CurProdsuceant));

                jo.Add("adjuntoact", Utils.getJSONArrayObject(param.CurAdjuntoact));
                jo.Add("adjuntoant", Utils.getJSONArrayObject(param.CurAdjuntoant));

                param.CurSuceact.Close();
                param.CurSuceant.Close();
                param.CurProdsuceact.Close();
                param.CurProdsuceant.Close();
                param.CurAdjuntoact.Close();
                param.CurAdjuntoant.Close();

                p.print(jo);
            }

        }

        private void PRODUCTO(Parameters p)
        {
            if ("GETDETALLE".Equals(p.subcommand))
            {
                PkgSolicitud.ProductoGetdetalleParam param = DAO.productoGetdetalle(p.conn, p.getMap());
                JSONObject jo = new JSONObject();
                jo.Add("composicion", Utils.getJSONArrayArray(param.CurComposicion));
                jo.Add("envase", Utils.getJSONArrayArray(param.CurEnvase));
                jo.Add("aditivo", Utils.getJSONArrayArray(param.CurAditivo));
                jo.Add("lote", Utils.getJSONArrayArray(param.CurLote)); //modificado por CESAR BOCANEGRA
                param.CurComposicion.Close();
                param.CurEnvase.Close();
                param.CurAditivo.Close();
                param.CurLote.Close();//modificado por CESAR BOCANEGRA
                p.print(jo);

            }
            else if ("UPDATE".Equals(p.subcommand))
            {
                //DAO.productoUpdate(p.conn, p.getMap());
            }
            else if ("UPDATEESTADO".Equals(p.subcommand))
            {
                DAO.productoUpdateEstado(p.conn, p.getMap());
            }
            else if ("GETBYID".Equals(p.subcommand))
            {

                PkgSolicitud.ProdGetbyidParam param = DAO.prodGetbyid(p.conn, p.getMap());
                JSONObject jo = new JSONObject();
                jo.Add("form", Utils.getJSONObject(param.CurForm));
                jo.Add("componente", Utils.getJSONArrayArray(param.CurComponente));
                jo.Add("aditivo", Utils.getJSONArrayArray(param.CurAditivo));
                jo.Add("envase", Utils.getJSONArrayArray(param.CurEnvase));
                param.CurForm.Close();
                param.CurComponente.Close();
                param.CurAditivo.Close();
                param.CurEnvase.Close();
                p.print(jo);


            }
            else if ("EDIT".Equals(p.subcommand))
            {

                PkgSolicitud.ProdEditParam param = DAO.newProdEditParam(p.getMap());
                param.Idpersonal = p.iduser;
                DAO.prodEdit(p.conn, param);

            }
            else if ("DUPLICAR".Equals(p.subcommand))
            {
                PkgSolicitud.ProdDuplicarParam param = DAO.newProdDuplicarParam(p.getMap());
                param.Idpersonal = p.iduser;
                DAO.prodDuplicar(p.conn, param);
            }
        }

        private void SUBSANACION(Parameters p)
        {
            if ("GETBYID".Equals(p.subcommand))
            {
                PkgSolicitud.SubsanaGetbyidParam param = DAO.subsanaGetbyid(p.conn, p.getMap());
                p.print(Utils.getJSONObject(param.CurSubsanacion));
                param.CurSubsanacion.Close();

            }
            else if ("UPDATE".Equals(p.subcommand))
            {
                PkgSolicitud.SubsanaUpdateParam param = DAO.subsanaUpdate(p.conn, p.getMap());
                JSONObject jo = new JSONObject();
                jo.Add("idsubsanacion", param.Idsubsanacion);
                p.print(jo);

                string numesol = p.getParameter("numesolicitud");
                string numesolicitud = numesol.Substring(1, 10).ToString() + "\\" + numesol;
                //string numesolicitud = p.getParameter("numesolicitud");
                string folder = param.Rutaadj;
                string dirAnterior = UploadHelper.GetPath(numesolicitud, folder, null);
                string dirNuevo = UploadHelper.GetPath(numesolicitud, "NS" + param.Idsubsanacion.ToString(), null);
                if (!dirAnterior.Equals(dirNuevo))
                {
                    UploadHelper.renameDir(dirAnterior, dirNuevo);
                }
            }
            else if ("GETMESSAGE".Equals(p.subcommand))
            {
                PkgSolicitud.SubsanaGetmessageParam param = DAO.subsanaGetmessage(p.conn, p.getMap());
                JSONObject jo = new JSONObject();
                jo.Add("mensaje", param.Mensaje);
                p.print(jo);

            }
        }

        private void REENVIAR(Parameters p)
        {
            if ("GETLIST".Equals(p.subcommand))
            {
                PkgVuce.GetlistnotifParam param = DAOvuce.newGetlistnotifParam(p.getMap());
                param.Iduser = p.iduser;
                DAOvuce.getlistnotif(p.conn, param);
                JSONObject jo = new JSONObject();
                jo.Add("total", param.Totalrows);
                jo.Add("items", Utils.getJSONArrayObject(param.CurOut));
                param.CurOut.Close();
                p.print(jo);

            }
            else if ("RESEND".Equals(p.subcommand))
            {
                PkgVuce.Serv1Param param = DAOvuce.serv1(p.conn, p.getMap());
            }
        }

        private void DR(Parameters p)
        {
            if ("GETBYID".Equals(p.subcommand))
            {
                PkgSolicitud.GetdrByidParam param = DAO.getdrByid(p.conn, p.getMap());
                p.print(Utils.getJSONObject(param.CurOut));
                param.CurOut.Close();

            }
        }

        private void ADJUNTOS(Parameters p)
        {
            if ("GETLIST".Equals(p.subcommand))
            {
                PkgSolicitud.AdjGetlistParam param = DAO.adjGetlist(p.conn, p.getMap());
                p.print(Utils.getJSONArrayArray(param.CurOut));
                param.CurOut.Close();

            }
            else if ("INSERTOBS".Equals(p.subcommand))
            {
                PkgSolicitud.ObsadjEditParam param = DAO.obsadjEdit(p.conn, p.getMap());

            }
            else if ("DELETE".Equals(p.subcommand))
            {
                PkgSolicitud.AdjDeleteParam param = DAO.adjDelete(p.conn, p.getMap());
                String filename = p.getParameter("filename");
                String numesolicitud = p.getParameter("numesolicitud");
                File.Delete(UploadHelper.GetPath(numesolicitud, "", filename));

            }
            else if ("INSERT".Equals(p.subcommand))
            {
                PkgSolicitud.AdjInsertParam param = DAO.adjInsert(p.conn, p.getMap());

            }
            else if ("GETLISTTREE".Equals(p.subcommand))
            {
                PkgSolicitud.AdjGetlistParam param = DAO.adjGetlist(p.conn, p.getMap());
                p.print(Utils.getJSONTree(param.CurOut));
                param.CurOut.Close();

            }
        }        

    }
}